/*
 泛型的作用：使用泛型可以减少重复的代码
 封装函数：接收字符串就返回字符串，接收数字就返回数字，接收bool就返回bool
 */
void main() {
   final myDataSource = MyDataSource<int>();
  myDataSource.addData(1);
  myDataSource.addData(2);
  myDataSource.addData(3);
  print(myDataSource.getListCount());
  print(myDataSource.getData(1));
}

// 数据源接口（只负责定义，不实现）
abstract interface class IDataSource<T>{
  int getListCount();
  T getData(int index);
}

class MyDataSource<T> implements IDataSource<T>{
  // 数据列表
  List<T> _dataList= [];

  int getListCount(){
    return _dataList.length;
  }

   T getData(int index) {
    return _dataList[index];
  }

 void addData(T data) {
    _dataList.add(data);
  }

}
